package com.lonely.system.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lonely.system.domain.dto.menu.BatchDeleteMenuDTO;
import com.lonely.system.domain.dto.menu.MenuSubmitDTO;
import com.lonely.system.domain.dto.menu.QueryButtonDto;
import com.lonely.system.domain.dto.menu.SysMenuPageQueryDto;
import com.lonely.system.domain.entity.SysMenu;
import com.lonely.system.domain.vo.system.menu.QueryRoleButtonVo;
import com.lonely.system.domain.vo.system.menu.SysMenuPageQueryVo;
import com.lonely.system.domain.vo.system.menu.SysMenuTreeVo;

import java.util.List;
import java.util.Set;

/**
 * 菜单 业务层
 *
 * @author fzzf
 */
public interface ISysMenuService extends IService<SysMenu> {

    /**
     * 菜单分页查询列表
     *
     * @param queryDto
     * @return
     */
    Page<SysMenuPageQueryVo> page(SysMenuPageQueryDto queryDto);


    /**
     * 获取菜单树
     *
     * @return
     */
    List<SysMenuTreeVo> getMenuTree();

    /**
     * 查询指定菜单下的按钮集合
     *
     * @param queryButtonDto
     * @return
     */
    List<QueryRoleButtonVo> getButtonsByMenuIds(QueryButtonDto queryButtonDto);


    /**
     * 根据用户ID查询按钮权限
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    Set<String> selectButtonPermsByUserId(Long userId);

    /**
     * 查询指定用户关联的菜单path
     *
     * @param userId
     * @return
     */
    Set<String> selectMenuPathByUserId(Long userId);

    /**
     * 保存/编辑 菜单
     *
     * @param submitDTO
     */
    void submit(MenuSubmitDTO submitDTO);

    /**
     * 删除菜单
     *
     * @param menuId
     */
    void deleteMenu(Long menuId);

    /**
     * 批量删除菜单
     *
     * @param deleteMenuDTO
     */
    void batchDeleteMenu(BatchDeleteMenuDTO deleteMenuDTO);

}
